三十篇文章架構基本遵循:
前言:
前情提要,閱讀此文建議使用工具或知識.選擇這個主題主要原因是
Http
請求IIS Server
,進入CLR
前置動作),asp.net mvc源始碼解析文章中會盡量寫出我看到精華部分,但此系列文可能對於MVC新手不太容易閱讀,因為MVC框架中運用到許多設計模式和OOP觀念(當初我在閱讀上也花了不少功夫)
個人覺得OOP有很重要一個點是盡量用物件和物件關聯,資料狀態轉移來了解程式碼.
簡白來說就是物件關聯和關係
我希望大家閱讀完所有文章後可以獲得
Asp.net
基於.NET Framework
框架所提供,開發Web應用程式的類別庫,封裝在System.Web.dll
檔案中,提供使用者開發網頁,ASP.NET運行在安裝了.NET Framework的IIS(Internet Information Services)
伺服器上
微軟大大近幾年也投入開源行列讓我們可以更方便來窺探,Asp.net運作原理. 這個連結 Reference Source 可以查看微軟核心的DLL
程式碼(這個網站是我們第一階段追code的好朋友)
Asp.net
程式基本上是由IIS
進行託管,介紹Asp.net MVC
源始碼之前我們需要先了解Asp.net
和IIS
關係.
此篇同步發布在筆者Blog(開賽)Http 請求 Asp.net IIS伺服器架構 (第1天)
Web基於Http協定,它是一個無狀態協定,每次請求都是新的且不會紀錄之前請求的東西
下圖我畫出一個對於IIS請求基本會跑的流程圖.
基本分為兩個區塊
IIS Server
領域
Http.sys
的程式在監聽所有Http
請求並交由W3WP.exe
並透過aspnet_isapi
來此次請求是否為靜態檔案..Net CLR
領域由幾塊核心程式完成請求
之後會陸續介紹他們.
.Net CLR
執行返回結果.如何辨別是否為靜態檔案,就需要談談HttpHandler
的註冊表(後面有文章會說到)
基本上如果是請求Html
,css
,js
...都會直接回傳不會在經過.Net CLR
Asp.net所有應用程式都離不開兩個核心模組Httpmodule & Httphandler
且最終會找到一個繼承於IHttpHanlder
物件來處理請求.
在網路上看到一個很好地比喻HttpModule & HttpHandler
Http請求像是一個旅客身上帶著行李拿著票來搭火車.
HttpHandler
是火車的終點站.HttpModule
是火車中途停靠的各站.這個比喻可以很清楚知道每個請求透過CLR
就是要找到一個HttpHandler
來執行.
當IIS
在執行處理Http請求時工作管理員有一個w3wp
應用程式在監聽.
此應用程式會依照aspnet_isapi
模組來判斷此次請求是否走入.net CLR
今天我們了解到
Http.sys
程式在監聽所有Http
請求w3wp.exe
初步過濾判斷如何執行此請求.瀏覽器發出Http請求給IIS,IIS透過Http.sys
來監聽請求並交給w3wp.exe
這個應用程式來判斷是否要交由.net
託管處理此次請求.
下篇我們會來詳細講述Httpmodule & Httphandler